#include "libPPD.h"


void pasarACHS(uint32_t sector, t_CHS *sectorTransformado)
{
	extern t_config config;
	div_t resto;

	resto = div(sector, config.s);
	sectorTransformado->C = resto.quot;
	sectorTransformado->H = 0;
	sectorTransformado->S = resto.rem;
}


void pasarAuint (t_CHS sectorCHS, uint32_t *sectorLogico)
{
	extern t_config config;
	*sectorLogico = sectorCHS.C * config.s + sectorCHS.S;

}


uint32_t numeroPista (uint32_t sector)
{
	uint32_t pista;
	t_CHS sectorCHS;
	pasarACHS (sector, &sectorCHS);
	pista = sectorCHS.C;
	return pista;
}


/* Loguear llegada de un pedido junto con el tipo (lectura/escritura) y el sector */
void loguearTipoPedido(t_NIPC paquete)
{
	extern t_log *loguear;
	extern t_config config;
if (config.logActivado == 1)
{

	if (paquete.PayloadDescriptor == LEERSECTOR)
	{
		uint32_t sector = paquete.nroSector;
		log_info(loguear, "PPD", "Se recibió un pedido de lectura del sector %d", sector);
	}
	else if (paquete.PayloadDescriptor == ESCRIBIRSECTOR)
	{
		uint32_t sector = paquete.nroSector;
		log_info(loguear, "PPD", "Se recibió un pedido de escritura del sector %d", sector);
	}
	else if (paquete.PayloadDescriptor == TRACE)
	{
		uint32_t sector = paquete.nroSector;
		log_info(loguear, "PPD", "Se recibió un pedido de la consola del sector %d", sector);
	}
}
}

void actualizarCabezal(int32_t nroSector)
{
	extern tCabezal cabezal;
	extern t_config config;
	int32_t bloquearCabezal;
	t_CHS nroSectorCHS;

	bloquearCabezal = pthread_mutex_lock(&cabezal.bloqueaCabezal);
	pasarACHS(nroSector, &nroSectorCHS);
	if(nroSectorCHS.S == (config.s - 1))
	{
		cabezal.posActual.C = nroSectorCHS.C + 1;
		cabezal.posActual.S = 0;
	}
	else
	{
		cabezal.posActual.C = nroSectorCHS.C;
		cabezal.posActual.S = nroSectorCHS.S + 1;
	}
	cabezal.posActual.H = nroSectorCHS.H;
	bloquearCabezal = pthread_mutex_unlock(&cabezal.bloqueaCabezal);
}
